package com.divemotor.ventarepuestosinternet.controller;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import org.apache.log4j.Logger;
import org.primefaces.context.RequestContext;

import com.divemotor.ventarepuestosinternet.beans.form.GrupoBeanForm;
import com.divemotor.ventarepuestosinternet.exception.DivemotorBusinessException;
import com.divemotor.ventarepuestosinternet.model.Grupo;
import com.divemotor.ventarepuestosinternet.service.GrupoService;
import com.divemotor.ventarepuestosinternet.util.Constantes;
import com.divemotor.ventarepuestosinternet.util.FacesContextUtil;

@ManagedBean(name="gestionGruposController")
@ViewScoped
public class GestionGruposController {

	private static final Logger logger = Logger.getLogger(GestionGruposController.class);
	
	@ManagedProperty(value="#{grupoService}")
	private GrupoService grupoService;  

	private GrupoBeanForm grupoBeanForm;
	private Grupo grupoNuevo;
	private Grupo grupoEditar;
	private Grupo grupoEliminar;
	private List<Grupo> listaGrupo;
	
	public GestionGruposController(){
		logger.info("GestionGruposController");
		grupoBeanForm 	= new GrupoBeanForm();
		grupoNuevo 		= new Grupo();
	}
	
	@PostConstruct
	public void init(){
		logger.info("init");
		buscarGrupos();
	}
	
	public void buscarGrupos() {	
		try {
			listaGrupo = grupoService.buscarGrupos(grupoBeanForm);
		} catch (Exception e) {
			logger.error("EX* buscarGrupos Exception: " + e.getMessage());
			FacesContextUtil.error(Constantes.MSJ_ERROR_SISTEMA);
		}
	}
	
	public void guardarNuevoGrupo() {
		try {
			grupoService.insertarGrupo(grupoNuevo);
			buscarGrupos();
			FacesContextUtil.info(Constantes.MSJ_GRUPO_REGISTRO_OK);
		} catch (DivemotorBusinessException e) {
			logger.error("EX* guardarNuevoGrupo DivemotorBusinessException: " + e.getMessage());
			RequestContext.getCurrentInstance(). addCallbackParam("ocurrioError", true);
			FacesContextUtil.warn(e.getMessage());
		} catch (Exception e) {
			logger.error("EX* guardarNuevoGrupo Exception: " + e.getMessage());
			RequestContext.getCurrentInstance(). addCallbackParam("ocurrioError", true);
			FacesContextUtil.error(Constantes.MSJ_ERROR_SISTEMA);
		}	
	}
	
	public void actualizarGrupo() {
		try {
			grupoService.actualizarGrupo(grupoEditar);
			buscarGrupos();
			FacesContextUtil.info(Constantes.MSJ_GRUPO_ACTUALIZADO_OK);
		} catch (DivemotorBusinessException e) {
			logger.error("EX* guardarNuevoGrupo DivemotorBusinessException: " + e.getMessage());
			RequestContext.getCurrentInstance(). addCallbackParam("ocurrioError", true);
			FacesContextUtil.warn(e.getMessage());
		} catch (Exception e) {
			logger.error("EX* actualizarGrupo Exception: " + e.getMessage());
			RequestContext.getCurrentInstance(). addCallbackParam("ocurrioError", true);
			FacesContextUtil.error(Constantes.MSJ_ERROR_SISTEMA);
		} 
	}
	
	public void eliminarGrupo() {		
		try {
			grupoService.eliminarGrupo(grupoEliminar);
			buscarGrupos();
			FacesContextUtil.info(Constantes.MSJ_GRUPO_ELIMINADO_OK);
		} catch (Exception e) {
			logger.error("EX* eliminarGrupo Exception: " + e.getMessage());
			RequestContext.getCurrentInstance(). addCallbackParam("ocurrioError", true);
			FacesContextUtil.error(Constantes.MSJ_ERROR_SISTEMA);
		}
	}
	
	public void elegirEliminarGrupo(Grupo grupo){
		grupoEliminar =  grupo;
	}
	
	public void elegirEditarGrupo(Grupo grupo){
		grupoEditar =  grupo;
		grupoEditar.setCodigoActual(grupoEditar.getCodigo());
	}
	
	public void limpiar() {
		grupoBeanForm.limpiarForm();
	}
	
	public void abrirNuevoGrupo(){
		grupoNuevo = new Grupo();
	}

	public void setGrupoService(GrupoService grupoService) {
		this.grupoService = grupoService;
	}

	public GrupoBeanForm getGrupo() {
		return grupoBeanForm;
	}

	public void setGrupo(GrupoBeanForm grupo) {
		this.grupoBeanForm = grupo;
	}

	public Grupo getGrupoNuevo() {
		return grupoNuevo;
	}

	public void setGrupoNuevo(Grupo grupoNuevo) {
		this.grupoNuevo = grupoNuevo;
	}

	public Grupo getGrupoEditar() {
		return grupoEditar;
	}

	public void setGrupoEditar(Grupo grupoEditar) {
		this.grupoEditar = grupoEditar;
	}

	public List<Grupo> getListaGrupo() {
		return listaGrupo;
	}

	public void setListaGrupo(List<Grupo> listaGrupo) {
		this.listaGrupo = listaGrupo;
	}
	
}
